home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / -in_the_mag- / emulation / cpu / z80 / distant.i < prev    next >
Text File  |  1997-12-12  |  8KB  |  466 lines

  1. ** Z80 instruction routines that reside outside the 0-7FFF range of
  2. ** offsets from InstrBase.
  3.  
  4. ** The labels are formed from prepending a "d_" to the actual instruction
  5. ** label, from which a direct jump is made (absolute long) to the
  6. ** d_<instr> label.
  7.  
  8.     IFD VERBOSE
  9.     LIST
  10. ** Compiling the distant.i file.
  11.     NOLIST
  12.     ENDC
  13.  
  14. ** ----------------------------------------------------------------------
  15.  
  16.     ;First, any standard instructions (but preferably they
  17.     ;will all be within the offset range).
  18.  
  19.         ;(None, for the moment).
  20.  
  21. ** ----------------------------------------------------------------------
  22.  
  23.     ;Then, "undocumented" instructions. More particularly,
  24.     ;those that are slow and take up a lot of space.
  25.     ;They should only be compiled if undocumented instructions
  26.     ;actually are used, i.e. UNDOCINSTR_UNDEF is not set.
  27.  
  28.     IFND UNDOCINSTR_UNDEF
  29.  
  30.     IFD VERBOSE
  31.     LIST
  32. ** Compiling routines for "undocumented" distant instructions.
  33.     NOLIST
  34.     ENDC
  35.  
  36. d_rlxyr_r_1xy1    MACRO
  37. d_Rl_\1_1I\2_d1    opcode_3_bytes
  38.         index    \2
  39.         getz    d7,\1    ;bits 15-8 already clear
  40.         lsr.w    #1,d6
  41.         roxl.b    #1,\1
  42.         putsr    d6
  43.         parity    \1
  44.         putz    \1,d7
  45.         skip 3
  46.         next
  47.         ENDM
  48.  
  49. d_rlxyr_H_1xy1    MACRO
  50. d_Rl_H_1I\1_d1    opcode_3_bytes
  51.         index    \1
  52.         move.w    A,2(Work)
  53.         getz    d7,A    ;bits 15-8 already clear
  54.         lsr.w    #1,d6
  55.         roxl.b    #1,A
  56.         putsr    d6
  57.         parity    A
  58.         putz    A,d7
  59.         move.w    HL,(Work)
  60.         move.b    A,(Work)
  61.         move.w    (Work),HL
  62.         move.w    2(Work),A
  63.         skip 3
  64.         next
  65.         ENDM
  66.  
  67. d_rlxyr_1xy1    MACRO
  68.     d_rlxyr_r_1xy1 A,\1
  69.     d_rlxyr_r_1xy1 B,\1
  70.     d_rlxyr_r_1xy1 C,\1
  71.     d_rlxyr_r_1xy1 D,\1
  72.     d_rlxyr_r_1xy1 E,\1
  73.     d_rlxyr_r_1xy1 L,\1
  74.     d_rlxyr_H_1xy1 \1
  75.         ENDM
  76.     do_xy    d_rlxyr_1xy1
  77. ** --
  78. d_rlcxyr_r_1xy1    MACRO
  79. d_Rlc_\1_1I\2_d1
  80.         opcode_3_bytes
  81.         index    \2
  82.         getz    d7,\1
  83.         rol.b    #1,\1
  84.         putsr    d6
  85.         parity    \1
  86.         putz    \1,d7
  87.         skip 3
  88.         next
  89.         ENDM
  90.  
  91. d_rlcxyr_H_1xy1    MACRO
  92. d_Rlc_H_1I\1_d1    opcode_3_bytes
  93.         index    \1
  94.         move.w    A,2(Work)
  95.         getz    d7,A
  96.         rol.b    #1,A
  97.         putsr    d6
  98.         parity    A
  99.         putz    A,d7
  100.         move.w    HL,(Work)
  101.         move.b    A,(Work)
  102.         move.w    (Work),HL
  103.         move.w    2(Work),A
  104.         skip 3
  105.         next
  106.         ENDM
  107.  
  108. d_rlcxyr_1xy1    MACRO
  109.     d_rlcxyr_r_1xy1 A,\1
  110.     d_rlcxyr_r_1xy1 B,\1
  111.     d_rlcxyr_r_1xy1 C,\1
  112.     d_rlcxyr_r_1xy1 D,\1
  113.     d_rlcxyr_r_1xy1 E,\1
  114.     d_rlcxyr_r_1xy1 L,\1
  115.     d_rlcxyr_H_1xy1 \1
  116.         ENDM
  117.     do_xy    d_rlcxyr_1xy1
  118. ** --
  119. d_rrxyr_r_1xy1    MACRO
  120. d_Rr_\1_1I\2_d1    opcode_3_bytes
  121.         index    \2
  122.         getz    d7,\1
  123.         lsr.w    #1,d6
  124.         roxr.b    #1,\1
  125.         putsr    d6
  126.         parity    \1
  127.         putz    \1,d7
  128.         skip 3
  129.         next
  130.         ENDM
  131.  
  132. d_rrxyr_H_1xy1    MACRO
  133. d_Rr_H_1I\1_d1    opcode_3_bytes
  134.         index    \1
  135.         move.w    A,2(Work)
  136.         getz    d7,A
  137.         lsr.w    #1,d6
  138.         roxr.b    #1,A
  139.         putsr    d6
  140.         parity    A
  141.         putz    A,d7
  142.         move.w    HL,(Work)
  143.         move.b    A,(Work)
  144.         move.w    (Work),HL
  145.         move.w    2(Work),A
  146.         skip 3
  147.         next
  148.         ENDM
  149.  
  150. d_rrxyr_1xy1    MACRO
  151.     d_rrxyr_r_1xy1 A,\1
  152.     d_rrxyr_r_1xy1 B,\1
  153.     d_rrxyr_r_1xy1 C,\1
  154.     d_rrxyr_r_1xy1 D,\1
  155.     d_rrxyr_r_1xy1 E,\1
  156.     d_rrxyr_r_1xy1 L,\1
  157.     d_rrxyr_H_1xy1 \1
  158.         ENDM
  159.     do_xy    d_rrxyr_1xy1
  160. ** --
  161. d_rrcxyr_r_1xy1    MACRO
  162. d_Rrc_\1_1I\2_d1
  163.         opcode_3_bytes
  164.         index    \2
  165.         getz    d7,\1
  166.         ror.b    #1,\1
  167.         putsr    d6
  168.         parity    \1
  169.         putz    \1,d7
  170.         skip 3
  171.         next
  172.         ENDM
  173.  
  174. d_rrcxyr_H_1xy1    MACRO
  175. d_Rrc_H_1I\1_d1    opcode_3_bytes
  176.         index    \1
  177.         move.w    A,2(Work)
  178.         getz    d7,A
  179.         ror.b    #1,A
  180.         putsr    d6
  181.         parity    A
  182.         putz    A,d7
  183.         move.w    HL,(Work)
  184.         move.b    A,(Work)
  185.         move.w    (Work),HL
  186.         move.w    2(Work),A
  187.         skip 3
  188.         next
  189.         ENDM
  190.  
  191. d_rrcxyr_1xy1    MACRO
  192.     d_rrcxyr_r_1xy1 A,\1
  193.     d_rrcxyr_r_1xy1 B,\1
  194.     d_rrcxyr_r_1xy1 C,\1
  195.     d_rrcxyr_r_1xy1 D,\1
  196.     d_rrcxyr_r_1xy1 E,\1
  197.     d_rrcxyr_r_1xy1 L,\1
  198.     d_rrcxyr_H_1xy1 \1
  199.         ENDM
  200.     do_xy    d_rrcxyr_1xy1
  201. ** --
  202. d_slaxyr_r_1xy1    MACRO
  203. d_Sla_\1_1I\2_d1
  204.         opcode_3_bytes
  205.         index    \2
  206.         getz    d7,\1
  207.         lsl.b    #1,\1
  208.         putsr    d6
  209.         parity    \1
  210.         putz    \1,d7
  211.         skip 3
  212.         next
  213.         ENDM
  214.  
  215. d_slaxyr_H_1xy1    MACRO
  216. d_Sla_H_1I\1_d1    opcode_3_bytes
  217.         index    \1
  218.         move.w    A,2(Work)
  219.         getz    d7,A
  220.         lsl.b    #1,A
  221.         putsr    d6
  222.         parity    A
  223.         putz    A,d7
  224.         move.w    HL,(Work)
  225.         move.b    A,(Work)
  226.         move.w    (Work),HL
  227.         move.w    2(Work),A
  228.         skip 3
  229.         next
  230.         ENDM
  231.  
  232. d_slaxyr_1xy1    MACRO
  233.     d_slaxyr_r_1xy1 A,\1
  234.     d_slaxyr_r_1xy1 B,\1
  235.     d_slaxyr_r_1xy1 C,\1
  236.     d_slaxyr_r_1xy1 D,\1
  237.     d_slaxyr_r_1xy1 E,\1
  238.     d_slaxyr_r_1xy1 L,\1
  239.     d_slaxyr_H_1xy1 \1
  240.         ENDM
  241.     do_xy    d_slaxyr_1xy1
  242. ** --
  243. d_sllxyr_r_1xy1    MACRO
  244. d_Sll_\1_1I\2_d1
  245.         opcode_3_bytes
  246.         index    \2
  247.         getz    d7,\1
  248.         lsl.b    #1,\1
  249.         putsr    d6
  250.         incb    \1
  251.         parity    \1
  252.         putz    \1,d7
  253.         skip 3
  254.         next
  255.         ENDM
  256.  
  257. d_sllxyr_H_1xy1    MACRO
  258. d_Sll_H_1I\1_d1    opcode_3_bytes
  259.         index    \1
  260.         move.w    A,2(Work)
  261.         getz    d7,A
  262.         lsl.b    #1,A
  263.         putsr    d6
  264.         incb    A
  265.         parity    A
  266.         putz    A,d7
  267.         move.w    HL,(Work)
  268.         move.b    A,(Work)
  269.         move.w    (Work),HL
  270.         move.w    2(Work),A
  271.         skip 3
  272.         next
  273.         ENDM
  274.  
  275. d_sllxyr_1xy1    MACRO
  276.     d_sllxyr_r_1xy1 A,\1
  277.     d_sllxyr_r_1xy1 B,\1
  278.     d_sllxyr_r_1xy1 C,\1
  279.     d_sllxyr_r_1xy1 D,\1
  280.     d_sllxyr_r_1xy1 E,\1
  281.     d_sllxyr_r_1xy1 L,\1
  282.     d_sllxyr_H_1xy1 \1
  283.         ENDM
  284.     do_xy    d_sllxyr_1xy1
  285. ** --
  286. d_sraxyr_r_1xy1    MACRO
  287. d_Sra_\1_1I\2_d1
  288.         opcode_3_bytes
  289.         index    \2
  290.         getz    d7,\1
  291.         asr.b    #1,\1
  292.         putsr    d6
  293.         parity    \1
  294.         putz    \1,d7
  295.         skip 3
  296.         next
  297.         ENDM
  298.  
  299. d_sraxyr_H_1xy1    MACRO
  300. d_Sra_H_1I\1_d1    opcode_3_bytes
  301.         index    \1
  302.         move.w    A,2(Work)
  303.         getz    d7,A
  304.         asr.b    #1,A
  305.         putsr    d6
  306.         parity    A
  307.         putz    A,d7
  308.         move.w    HL,(Work)
  309.         move.b    A,(Work)
  310.         move.w    (Work),HL
  311.         move.w    2(Work),A
  312.         skip 3
  313.         next
  314.         ENDM
  315.  
  316. d_sraxyr_1xy1    MACRO
  317.     d_sraxyr_r_1xy1 A,\1
  318.     d_sraxyr_r_1xy1 B,\1
  319.     d_sraxyr_r_1xy1 C,\1
  320.     d_sraxyr_r_1xy1 D,\1
  321.     d_sraxyr_r_1xy1 E,\1
  322.     d_sraxyr_r_1xy1 L,\1
  323.     d_sraxyr_H_1xy1 \1
  324.         ENDM
  325.     do_xy    d_sraxyr_1xy1
  326. ** --
  327. d_srlxyr_r_1xy1    MACRO
  328. d_Srl_\1_1I\2_d1
  329.         opcode_3_bytes
  330.         index    \2
  331.         getz    d7,\1
  332.         lsr.b    #1,\1
  333.         putsr    d6
  334.         parity    \1
  335.         putz    \1,d7
  336.         skip 3
  337.         next
  338.         ENDM
  339.  
  340. d_srlxyr_H_1xy1    MACRO
  341. d_Srl_H_1I\1_d1    opcode_3_bytes
  342.         index    \1
  343.         move.w    A,2(Work)
  344.         getz    d7,A
  345.         lsr.b    #1,A
  346.         putsr    d6
  347.         parity    A
  348.         putz    A,d7
  349.         move.w    HL,(Work)
  350.         move.b    A,(Work)
  351.         move.w    (Work),HL
  352.         move.w    2(Work),A
  353.         skip 3
  354.         next
  355.         ENDM
  356.  
  357. d_srlxyr_1xy1    MACRO
  358.     d_srlxyr_r_1xy1 A,\1
  359.     d_srlxyr_r_1xy1 B,\1
  360.     d_srlxyr_r_1xy1 C,\1
  361.     d_srlxyr_r_1xy1 D,\1
  362.     d_srlxyr_r_1xy1 E,\1
  363.     d_srlxyr_r_1xy1 L,\1
  364.     d_srlxyr_H_1xy1 \1
  365.         ENDM
  366.     do_xy    d_srlxyr_1xy1
  367. ** --
  368. d_resrbxy_r_b_1xy1 MACRO
  369. d_Res_\1_\2_1I\3_d1
  370.         opcode_3_bytes
  371.         index    \3
  372.         getz    d7,\1
  373.         bclr    #\2,\1
  374.         putz    \1,d7
  375.         skip 3
  376.         next
  377.         ENDM
  378.  
  379. d_resrbxy_H_b_1xy1 MACRO
  380. d_Res_H_\1_1I\2_d1
  381.         opcode_3_bytes
  382.         index    \2
  383.         move.w    HL,(Work)
  384.         getz    d7,(Work)
  385.         bclr    #\1,(Work)
  386.         putz    (Work),d7
  387.         move.w    (Work),HL
  388.         skip 3
  389.         next
  390.         ENDM
  391.  
  392. d_resrbxy_b_1xy1 MACRO
  393.     d_resrbxy_r_b_1xy1 A,\1,\2
  394.     d_resrbxy_r_b_1xy1 B,\1,\2
  395.     d_resrbxy_r_b_1xy1 C,\1,\2
  396.     d_resrbxy_r_b_1xy1 D,\1,\2
  397.     d_resrbxy_r_b_1xy1 E,\1,\2
  398.     d_resrbxy_r_b_1xy1 L,\1,\2
  399.     d_resrbxy_H_b_1xy1 \1,\2
  400.         ENDM
  401.  
  402. d_resrbxy_1xy1    MACRO
  403.     d_resrbxy_b_1xy1 0,\1
  404.     d_resrbxy_b_1xy1 1,\1
  405.     d_resrbxy_b_1xy1 2,\1
  406.     d_resrbxy_b_1xy1 3,\1
  407.     d_resrbxy_b_1xy1 4,\1
  408.     d_resrbxy_b_1xy1 5,\1
  409.     d_resrbxy_b_1xy1 6,\1
  410.     d_resrbxy_b_1xy1 7,\1
  411.         ENDM
  412.  
  413.     do_xy d_resrbxy_1xy1
  414. ** --
  415. d_setrbxy_r_b_1xy1 MACRO
  416. d_Set_\1_\2_1I\3_d1
  417.         opcode_3_bytes
  418.         index    \3
  419.         getz    d7,\1
  420.         bset    #\2,\1
  421.         putz    \1,d7
  422.         skip 3
  423.         next
  424.         ENDM
  425.  
  426. d_setrbxy_H_b_1xy1 MACRO
  427. d_Set_H_\1_1I\2_d1
  428.         opcode_3_bytes
  429.         index    \2
  430.         move.w    HL,(Work)
  431.         getz    d7,(Work)
  432.         bset    #\1,(Work)
  433.         putz    (Work),d7
  434.         move.w    (Work),HL
  435.         skip 3
  436.         next
  437.         ENDM
  438.  
  439. d_setrbxy_b_1xy1 MACRO
  440.     d_setrbxy_r_b_1xy1 A,\1,\2
  441.     d_setrbxy_r_b_1xy1 B,\1,\2
  442.     d_setrbxy_r_b_1xy1 C,\1,\2
  443.     d_setrbxy_r_b_1xy1 D,\1,\2
  444.     d_setrbxy_r_b_1xy1 E,\1,\2
  445.     d_setrbxy_r_b_1xy1 L,\1,\2
  446.     d_setrbxy_H_b_1xy1 \1,\2
  447.         ENDM
  448.  
  449. d_setrbxy_1xy1    MACRO
  450.     d_setrbxy_b_1xy1 0,\1
  451.     d_setrbxy_b_1xy1 1,\1
  452.     d_setrbxy_b_1xy1 2,\1
  453.     d_setrbxy_b_1xy1 3,\1
  454.     d_setrbxy_b_1xy1 4,\1
  455.     d_setrbxy_b_1xy1 5,\1
  456.     d_setrbxy_b_1xy1 6,\1
  457.     d_setrbxy_b_1xy1 7,\1
  458.         ENDM
  459.  
  460.     do_xy d_setrbxy_1xy1
  461. ** --
  462.  
  463.     ENDC ;IFND UNDOCINSTR_UNDEF
  464.  
  465. ** =====================================================================
  466.